home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #1 / Amiga Plus CD - 2000 - No. 1.iso / Games / Starter / JST / Developer / sources / OSEmu / intuition.s < prev    next >
Encoding:
Text File  |  1999-12-03  |  6.3 KB  |  287 lines

  1. * $Id: intuition.s 1.1 1999/02/03 04:10:30 jotd Exp jotd $
  2. **************************************************************************
  3. *   INTUITION-LIBRARY                                                    *
  4. **************************************************************************
  5. **************************************************************************
  6. *   INITIALIZATION                                                       *
  7. **************************************************************************
  8.  
  9. REMEMBER_SIZE = $4000    ; 16K (2000 allocations)
  10.  
  11. INTUIINIT    move.l    _intbase,d0
  12.         beq    .init
  13.         rts
  14.  
  15. .init        move.l    #-_LVOBltBitMapRastPort,d0
  16.         move.l    #242,d1
  17.         lea    _intname,a0
  18.         bsr    _InitLibrary
  19.         move.l    d0,a0
  20.         move.l    d0,_intbase
  21.         
  22.         patch    _LVOCloseWorkBench(a0),CLOSEWB(pc)
  23.         patch    _LVOClearDMRequest(A0),MYRTZ(PC)
  24.         patch    _LVOOpenWindow(A0),_OPENWINDOW(PC)
  25.         patch    _LVOCloseWindow(A0),_CLOSEWINDOW(PC)
  26.         patch    _LVOCloseScreen(A0),MYRTS(PC)        ; -- added by JOTD
  27.         patch    _LVOShowTitle(A0),MYRTS(PC)        ; -- added by JOTD
  28.         patch    _LVOClearPointer(A0),MYRTS(PC)        ; -- added by JOTD
  29.         patch    _LVOClearMenuStrip(A0),MYRTS(PC)    ; -- added by JOTD
  30.         patch    _LVOOpenWorkBench(A0),_OPENWB(PC)    ; -- added by JOTD
  31.         patch    _LVOAlohaWorkbench(A0),MYRTS(PC)    ; -- added by JOTD
  32.         patch    _LVORethinkDisplay(A0),MYRTS(PC)    ; -- added by JOTD
  33.         patch    _LVOCurrentTime(A0),_CURRENTTIME(PC)    ; -- added by JOTD
  34.         patch    _LVOGetPrefs(A0),_GETPREFS(PC)        ; -- added by JOTD
  35.         patch    _LVOSetPrefs(A0),_SETPREFS(PC)        ; -- dummy, JOTD
  36.         patch    _LVOOpenScreen(A0),_OPENSCREEN(PC)    ; -- dummy, JOTD
  37.         patch    _LVOLockIBase(A0),_LOCKIBASE(PC)
  38.         patch    _LVOAllocRemember(A0),_ALLOCREMEMBER(PC)
  39.         patch    _LVOFreeRemember(A0),_FREEREMEMBER(PC)
  40.  
  41.         movem.l    D0-A6,-(A7)
  42.  
  43.         ; allocate memory for AllocRemember/FreeRemember functions
  44.         ; added by JOTD
  45.  
  46.         move.l    #REMEMBER_SIZE,D0
  47.         move.l    #MEMF_CLEAR,D1
  48.         bsr    ALLOCM
  49.         move.l    D0,REMEMBER_TABLE
  50.         beq.b    .fail        ; could not allocate the memory!
  51.  
  52.         add.l    #REMEMBER_SIZE,D0
  53.         move.l    D0,REMEMBER_TOP
  54.  
  55.         movem.l    (A7)+,D0-A6
  56.         rts
  57.  
  58. .fail        pea    _LVOOpenLibrary
  59.         pea    _execname
  60.         bra    _emufail
  61.     
  62. **************************************************************************
  63. *   SCREEN FUNCTIONS                                                     *
  64. **************************************************************************
  65.  
  66. _OPENSCREEN:
  67.     move.l    A0,D0    ; returns user pointer (dummy function!)
  68.     rts
  69.  
  70. _OPENWB:
  71.     moveq.l    #1,D0    ; non-NULL
  72.     rts
  73.  
  74. ISCLOSED
  75.     dc.l    0    ; added by JOTD
  76.  
  77. ;since there is no workbench, closing should awlays return 0 for success
  78. ;but some programs loop until the routine returns false (ok the wb is closed)
  79.  
  80. CLOSEWB
  81.     movem.l    A0,-(A7)
  82.     lea    ISCLOSED(pc),A0
  83.     move.l    (A0),D0        ; first time returns 0, and 1 afterwards
  84.     move.l    #1,(A0)
  85.     movem.l    (A7)+,A0
  86.     RTS
  87.  
  88. _SETPREFS:
  89.     move.l    A0,D0    
  90.     rts
  91.  
  92. ; < A0: PrefBuffer
  93. ; < D0: Size
  94. ; > D0: returns PrefBuffer
  95.  
  96. _GETPREFS
  97.     lea    prefsdata(pc),A1
  98.     move.l    D0,D1
  99.     move.l    D0,A0
  100.     subq.l    #1,D1
  101. .copy
  102.     move.b    (A1)+,(A0)+
  103.     dbf    D1,.copy
  104.     rts
  105.  
  106. _OPENWINDOW    MOVE.L    A0,-(A7)
  107.         MOVE.L    #$84,D0
  108.         MOVEQ.L    #0,D1
  109.         BSR.W    ALLOCM
  110.         MOVE.L    D0,A1
  111.         MOVE.L    (A7)+,A0
  112.         MOVE.L    (A0),wd_LeftEdge(A1)
  113.         MOVE.L    nw_Width(A0),wd_Width(A1)
  114.         MOVE.W    nw_DetailPen(A0),wd_DetailPen(A1)
  115.         MOVE.L    nw_IDCMPFlags(A0),wd_IDCMPFlags(A1)
  116.         MOVE.L    nw_Flags(A0),wd_Flags(A1)
  117.         MOVE.L    nw_FirstGadget(A0),wd_FirstGadget(A1)
  118.         MOVE.L    nw_CheckMark(A0),wd_CheckMark(A1)
  119.         MOVE.L    nw_Title(A0),wd_Title(A1)
  120.         MOVE.L    nw_Screen(A0),wd_WScreen(A1)
  121. ;        MOVE.L    nw_BitMap(A0),wd_    ;rastport ignored
  122.         MOVE.L    nw_MinWidth(A0),wd_MinWidth(A1)
  123.         MOVE.L    nw_MaxWidth(A0),wd_MaxWidth(A1)
  124.         RTS
  125.  
  126. _CLOSEWINDOW    MOVE.L    A0,A1
  127.         MOVE.L    #$84,D0
  128.         BSR.W    FREEM
  129.         RTS
  130.  
  131. _LOCKIBASE    MOVE.L    #'MYLK',D0
  132.         RTS
  133.         
  134. **************************************************************************
  135. *   ICON-LIBRARY                                                         *
  136. **************************************************************************
  137. **************************************************************************
  138. *   INITIALIZATION                                                       *
  139. **************************************************************************
  140.  
  141. ILIBINIT    move.l    _ilibbase,d0
  142.         beq    .init
  143.         rts
  144.  
  145. .init        move.l    #-_LVOBumpRevision,d0
  146.         move.l    #LIB_SIZE,D1
  147.         lea    _ilibname,a0
  148.         bsr    _InitLibrary
  149.         move.l    d0,a0
  150.         move.l    d0,_ilibbase
  151.         
  152. ;        patch    _LVOCloseWorkBench(a0),CLOSEWB(pc)
  153.  
  154.         rts
  155.  
  156.  
  157. **************************************************************************
  158. *   LAYERS-LIBRARY                                                       *
  159. **************************************************************************
  160. **************************************************************************
  161. *   INITIALIZATION                                                       *
  162. **************************************************************************
  163.  
  164. LAYERSINIT    move.l    _laybase,d0
  165.         beq    .init
  166.         rts
  167.  
  168. .init        move.l    #-_LVOMoveLayerInFrontOf,d0
  169.         move.l    #LIB_SIZE,D1
  170.         lea    _layname,a0
  171.         bsr    _InitLibrary
  172.         move.l    d0,a0
  173.         move.l    d0,_laybase
  174.         
  175. ;        patch    _LVOCloseWorkBench(a0),CLOSEWB(pc)
  176.  
  177.         rts
  178.  
  179. ; mathffp, mathtrans stuff relocated in specific files
  180.  
  181. _CURRENTTIME:                ; added by JOTD
  182.     move.l    sec_timer,(A0)
  183.     move.l    millisec_timer,(A1)
  184.     rts
  185.  
  186. ; AllocRemember (needed by SlamTilt)
  187. ;
  188. ; A0: struct Remember to allocate
  189. ; D0: size
  190. ; D1: flags
  191.  
  192. _ALLOCREMEMBER:
  193.     movem.l    A4-A5,-(A7)
  194.  
  195.     ; search for a spare location (0,xx)
  196.     
  197.     move.l    REMEMBER_TABLE(pc),A4
  198.     move.l    REMEMBER_TOP(pc),A5    
  199.  
  200. .loop
  201.     tst.l    (A4)
  202.     beq.b    .found
  203.  
  204.     addq.l    #8,A4        ; next
  205.     cmp.l    A5,A4
  206.     bcc.b    .fail        ; table full!
  207.  
  208. .found:
  209.  
  210.     ; store size
  211.  
  212.     move.l    D0,(4,A4)
  213.  
  214.     ; perform alloc
  215.  
  216.     move.l    A0,-(A7)
  217.     bsr    ALLOCM
  218.     move.l    (A7)+,A0
  219.  
  220.     ; store allocated pointer
  221.  
  222.     move.l    D0,(A4)
  223.  
  224.     tst.l    D0
  225.     beq.b    .exit
  226.  
  227.     move.l    A4,(A0)    ; A0 = struct Remember **
  228. .exit
  229.     movem.l    (A7)+,A4-A5
  230.     rts
  231.  
  232. .fail        pea    _LVOAllocRemember
  233.         pea    _intname
  234.         bra    _emufail
  235.  
  236. ; <A0: RememberKey
  237. ; <D0:= 0: just clear the structure
  238. ;     !=0: clear struct & free memory
  239.  
  240. _FREEREMEMBER:
  241.     cmp.l    #0,A0
  242.     beq.b    .exit    ; NULL pointer passed
  243.  
  244.     move.l    (A0),A0    ; pointer on the structure
  245.  
  246.     ; check A0 against bounds
  247.  
  248.     cmp.l    REMEMBER_TABLE,A0
  249.     bcs.b    .fail
  250.     cmp.l    REMEMBER_TOP,A0
  251.     bcc.b    .fail
  252.  
  253.     tst.l    D0
  254.     beq.b    .clrstruct
  255.  
  256.     ; free the memory
  257.  
  258.     move.l    (A0),A1
  259.     move.l    (4,A0),D0
  260.  
  261.     move.l    A0,-(A7)
  262.     bsr    FREEM
  263.     move.l    (A7)+,A0
  264.  
  265. .clrstruct
  266.  
  267.     clr.l    (A0)
  268.     clr.l    (4,A0)
  269.  
  270. .exit
  271.     rts
  272.  
  273. .fail        pea    _LVOFreeRemember
  274.         pea    _intname
  275.         bra    _emufail
  276.  
  277.  
  278. REMEMBER_TABLE:
  279.     dc.l    0
  280.  
  281. REMEMBER_TOP:
  282.     dc.l    0
  283.  
  284. prefsdata:
  285.     incbin    "prefsfile"
  286.     cnop    0,4
  287.